home *** CD-ROM | disk | FTP | other *** search
/ The Fatted Calf / The Fatted Calf.iso / Unix / CNews / Source / conf / build < prev    next >
Encoding:
Text File  |  1992-04-20  |  36.4 KB  |  1,092 lines

  1. #! /bin/sh
  2. PATH=:/bin:/usr/bin
  3.  
  4. # configuration variables to remember for next time
  5. vars='newsuid newsgid binuid bingid binsrc mess unmess newsarts newsctl
  6.     newsbin newsumask newsmaster newsconfig chown chboth chgrp unixkind
  7.     addrsize dbmopt faststdio storeval faststrchr sete ranlib
  8.     symdef cc copts ldopts postlibs hostname uname uucptype dftype dfdirs
  9.     archive spacelow nfsgroup server manpages manmess rbin doui bin atok
  10.     postdefltdist paranoid whoami mailname organization postdefltgroup
  11.     newspath fake fakehdrs immediate inputstall defsub mustsub'
  12. # where to remember them, by default
  13. memory=build.def
  14.  
  15. # functions and headers we are prepared to fake
  16. mightfake='fsync getopt memcpy memcmp memchr memset mkdir
  17.     putenv strchr strrchr strpbrk strspn strcspn strtok symlink strerror'
  18. mightfakehdrs='string.h stdlib.h stddef.h'
  19.  
  20. # directories in which to do makes
  21. # batch must precede input; relay must precede misc
  22. # the "doui" code below may add rna to the list
  23. pgmdirs='conf batch dbz expire input relay misc explode inject'
  24.  
  25. # control files built in conf
  26. ctlf="active errlog history history.pag history.dir localgroups"
  27. ctlf="$ctlf log mailname mailpaths organization postdefltdist postdefltgroup"
  28. ctlf="$ctlf replyusepath server sys whoami rnews.stall rnews.immed"
  29. ctlf="$ctlf readnews.ctl"
  30.  
  31. echo 'This interactive command will build shell files named doit.root,'
  32. echo 'doit.bin, doit.news, and again.root to do all the work.  It will not'
  33. echo 'actually do anything itself, so feel free to abort and start again.'
  34. echo
  35. echo 'You probably need your system manuals handy.'
  36. echo
  37. echo "When a question is asked in the form \`How are you [okay]? ', the"
  38. echo 'answer in brackets is what you will get if you just hit RETURN.'
  39. echo '(If you want give an empty string as the answer, type a single'
  40. echo "\`-' instead.)"
  41.  
  42. chmod +x ask yesno notinlist    # just in case
  43.  
  44. rewrite=yes
  45. case "$1" in
  46. -r)    rewrite=no
  47.     shift
  48.     ;;
  49. esac
  50. case $# in
  51. 0)    ;;
  52. *)    memory="$1"    ;;
  53. esac
  54. if test -r $memory
  55. then
  56.     echo
  57.     tmp=`yesno 'Do you want to use your previous answers as defaults' no`
  58.     case "$tmp" in
  59.     yes)    echo
  60.         echo 'Picking up defaults, from last run...'
  61.         . $memory
  62.         echo 'done'
  63.         ;;
  64.     esac
  65. fi
  66.  
  67. echo
  68. echo 'C News wants to keep most of its files under a uid which preferably'
  69. echo 'should be all its own.  Its programs, however, can and probably should'
  70. echo 'be owned by another user, typically the same one who owns most of the'
  71. echo 'rest of the system.  (Note that on a system running NFS, any program'
  72. echo 'not owned by "root" is a gaping security hole.)'
  73. newsuid=`ask 'What user id should be used for news files' ${newsuid-news}`
  74. newsgid=`ask 'What group id should be used for news files' ${newsgid-news}`
  75. binuid=`ask 'What user id should be used for news programs' ${binuid-bin}`
  76. bingid=`ask 'What group id should be used for news programs' ${bingid-bin}`
  77. binsrc=`yesno "Do the C News sources belong to $binuid" ${binsrc-yes}`
  78. case "$binsrc" in
  79. no)    echo "You may need to do some of the installation procedures by hand"
  80.     echo "after the software is built; doit.bin assumes that it has the"
  81.     echo "power to create files in the source directories and to update"
  82.     echo "the news programs."
  83.     ;;
  84. esac
  85.  
  86. if test '(' -d /var -a -d /usr/share ')' -o " $mess" = " yes"
  87. then
  88.     echo
  89.     echo 'It would appear that your system is among the victims of the'
  90.     echo '4.4BSD / SVR4 directory reorganization, with (e.g.) shared'
  91.     mess=`yesno 'data in /usr/share.  Is this correct' ${mess-yes}`
  92. else
  93.     mess=no
  94. fi
  95. case "$mess" in
  96. yes)    echo 'This will affect where C News directories go.  We recommend'
  97.     echo 'making the directories wherever they have to go and then making'
  98.     echo 'symbolic links to them under the standard names that are used'
  99.     echo 'as defaults in the following questions.  Should such links'
  100.     unmess=`yesno 'be made' ${unmess-yes}`
  101.     echo 'Our 4.4ish friends suggest putting articles in /var/spool/news'
  102.     echo 'and control files in /usr/share/news, with programs left where'
  103.     echo 'they are in /usr/lib/newsbin.'
  104.     ;;
  105. *)    unmess=no    ;;
  106. esac
  107.  
  108. echo
  109. echo 'C News lives primarily under three directories:  one for articles (and'
  110. echo 'incoming and outgoing spooling), one for control files, and one for'
  111. echo 'programs.'
  112. newsarts=`ask 'Where should articles live' ${newsarts-/usr/spool/news}`
  113. newsctl=`ask 'Where should control files live' ${newsctl-/usr/lib/news}`
  114. newsbin=`ask 'Where should programs live' ${newsbin-/usr/lib/newsbin}`
  115. case "$unmess" in
  116. yes)    linkarts="/usr/spool/news"
  117.     linkctl="/usr/lib/news"
  118.     linkbin="/usr/lib/newsbin"
  119.     ;;
  120. esac
  121.  
  122. case "$newspath" in
  123. '')    pathok=no    ;;
  124. *)    echo
  125.     echo "Is   $newspath"
  126.     echo 'the correct path to follow to find standard programs on your'
  127.     pathok=`yesno 'system' yes`
  128.     ;;
  129. esac
  130.  
  131. case "$pathok" in
  132. no)    newspath='/bin:/usr/bin'
  133.     echo
  134.     echo 'C News by default assumes that all normal Unix programs can be'
  135.     echo 'found in /bin or /usr/bin.  This is naive, especially on'
  136.     echo 'Berkeley-derived systems where some standard programs'
  137.     echo 'inexplicably moved to /usr/ucb.'
  138.     if test '(' ! -f /bin/wc -a ! -f /usr/bin/wc ')' -o \
  139.             '(' ! -f /bin/compress -a ! -f /usr/bin/compress -a \
  140.                         -f /usr/ucb/compress ')'
  141.     then
  142.         echo 'It appears that some standard programs live in /usr/ucb'
  143.         needucb=`yesno 'on your system.  Is that right' yes`
  144.     else
  145.         echo 'It appears that /usr/ucb does not exist or that no'
  146.         echo 'standard programs live there (and only there) on your'
  147.         tmp=`yesno 'system.  Is that right' yes`
  148.         case "$tmp" in
  149.         yes)    needucb=no    ;;
  150.         no)    needucb=yes    ;;
  151.         esac
  152.     fi
  153.     case "$needucb" in
  154.     yes)    echo 'Should /usr/ucb be searched after /bin and /usr/bin'
  155.         tmp=`yesno '(as opposed to before)' yes`
  156.         case "$tmp" in
  157.         yes)    newspath="$newspath:/usr/ucb"    ;;
  158.         no)    newspath="/usr/ucb:$newspath"    ;;
  159.         esac
  160.         ;;
  161.     esac
  162.     while true
  163.     do
  164.         echo 'Is there any other directory which should be searched'
  165.         more=`yesno 'to find standard programs on your system' no`
  166.         case "$more" in
  167.         no)    break    ;;
  168.         esac
  169.         dir=`ask 'What is the full name of the directory' /urk`
  170.         bef=`yesno 'Should it go after (as opposed to before) the others' yes`
  171.         case "$bef" in
  172.         no)    newspath="$dir:$newspath"    ;;
  173.         yes)    newspath="$newspath:$dir"    ;;
  174.         esac
  175.     done
  176.     ;;
  177. esac
  178.  
  179. echo
  180. echo 'C News normally uses a umask of 002, turning off only the others-write'
  181. echo 'bit in the permissions of files used.  (The correspondence between bits'
  182. echo 'and number is:  rwx = 421, so turning off group-write bits and all'
  183. echo 'others-access bits would be a mask of 027, for example.)  Usually'
  184. echo 'a umask of 002 or 022 is appropriate.'
  185. newsumask=`ask 'What umask should C News use' ${newsumask-002}`
  186. case "$newsumask" in
  187. 0*)    ;;
  188. *)    newsumask="0$newsumask"    ;;
  189. esac
  190.  
  191. echo
  192. echo 'C News wants to mail some forms of trouble reports to an administrator.'
  193. echo 'You probably want to make this a system mailbox, rather than that of a'
  194. echo "specific user, so you won't have to change the software when you get a"
  195. echo 'new administrator.'
  196. newsmaster=`ask 'Where should C News mail trouble reports' ${newsmaster-usenet}`
  197.  
  198. echo
  199. echo 'The shell files that are everywhere in C News want to pick up their'
  200. echo 'configuration parameters (mostly, the last few questions you have'
  201. echo 'answered) from a file at a known location; this is very hard to avoid'
  202. echo 'unless you play tricks with environment variables (see documentation).'
  203. echo 'Where should the shell configuration file be'
  204. newsconfig=`ask 'located' ${newsconfig-$newsctl/bin/config}`
  205.  
  206. echo
  207. chown=`ask 'What is the full pathname of the chown command' ${chown-/etc/chown}`
  208. echo "Can I say \`$chown $newsuid.$newsgid file' to change both the user id"
  209. chboth=`yesno 'and group id of a file' ${chboth-yes}`
  210. case "$chboth" in
  211. no)    chgrp=`ask 'What is the full pathname of chgrp' ${chgrp-/etc/chgrp}`
  212.     ;;
  213. yes)    chgrp="/etc/chgrp"    ;;
  214. esac
  215.  
  216. echo
  217. echo 'building doit.root...'
  218. >doit.root
  219. if test ! -w doit.root
  220. then
  221.     echo 'It appears that I cannot create doit.root.  Aborting.'
  222.     exit 1
  223. fi
  224. (
  225.     echo '#! /bin/sh'
  226.     echo "umask $newsumask"
  227.     echo 'set -x'
  228.     echo ": making directories..."
  229.     ln=
  230.     lb=
  231.     case "$unmess" in
  232.     yes)    echo "mkdir $newsarts $newsctl $newsbin"
  233.         if test " $linkarts" != " $newsarts"
  234.         then
  235.             echo "ln -s $newsarts $linkarts"
  236.             ln="$ln $linkarts"
  237.         fi
  238.         if test " $linkctl" != " $newsctl"
  239.         then
  240.             echo "ln -s $newsctl $linkctl"
  241.             ln="$ln $linkctl"
  242.         fi
  243.         if test " $linkbin" != " $newsbin"
  244.         then
  245.             echo "ln -s $newsbin $linkbin"
  246.             lb="$lb $linkbin"
  247.         fi
  248.         ;;
  249.     esac
  250.     n="$newsarts $newsarts/in.coming $newsarts/in.coming/bad"
  251.     n="$n $newsarts/out.going $newsarts/out.master $newsctl $newsctl/bin"
  252.     b="$newsbin"
  253.     echo "for d in $n $b"
  254.     echo "do"
  255.     echo "    if test ! -d \$d"
  256.     echo "    then"
  257.     echo "        mkdir \$d"
  258.     echo "    fi"
  259.     echo "done"
  260.     case "$chboth" in
  261.     yes)    echo "$chown $newsuid.$newsgid $n $ln"
  262.         echo "$chown $binuid.$bingid $b $lb"
  263.         ;;
  264.     no)    echo "$chown $newsuid $n $ln"
  265.         echo "$chgrp $newsgid $n $ln"
  266.         echo "$chown $binuid $b $lb"
  267.         echo "$chgrp $bingid $b $lb"
  268.         ;;
  269.     esac
  270.     echo ": done"
  271. ) >>doit.root
  272. echo 'done'
  273.  
  274. echo
  275. echo 'C News has libraries for several kinds of Unix:'
  276. echo '    bsd42    4.2BSD and successors'
  277. echo '    usg    AT&T System V'
  278. echo '    v7    Version 7 (4.1BSD is pretty close, ditto Xenix)'
  279. echo '    v8    Version 8, aka Eighth Edition'
  280. while true
  281. do
  282.     unixkind=`ask 'Which best describes your system' ${unixkind-v7}`
  283.     if test -d ../lib$unixkind
  284.     then
  285.         break
  286.     fi
  287.     echo 'Sorry, no such library is supplied.'
  288. done
  289.  
  290. echo
  291. echo 'C News has libraries for small address spaces (16 bits) and big'
  292. echo 'ones (preferably 32 bits, but anything rather bigger than 16).'
  293. while true
  294. do
  295.     addrsize=`ask 'Which best describes your system' ${addrsize-big}`
  296.     if test -d ../lib$addrsize
  297.     then
  298.         break
  299.     fi
  300.     echo 'Sorry, no such library is supplied.'
  301. done
  302.  
  303. echo
  304. echo 'Systems vary in whether certain library functions and system calls'
  305. echo 'are present.  C News contains reasonably-portable versions of the'
  306. echo 'possibly-missing library functions, and fake versions of the'
  307. echo 'possibly-missing system calls, but it needs to know which are missing.'
  308. newfake=
  309. for fn in $mightfake
  310. do
  311.     has=`notinlist "$fake" $fn.o`
  312.     tmp=`yesno "Does your system have  $fn()" $has`
  313.     case "$tmp" in
  314.     no)    newfake="$newfake $fn.o"    ;;
  315.     esac
  316. done
  317.  
  318. echo
  319. has=`notinlist "$fake" dbz.o`
  320. echo 'The news system uses a database package, typically the old "dbm"'
  321. echo 'library from Version 7 or a lookalike, as an indexing system.  We'
  322. echo 'supply a version of the "dbz" library, which is faster than "dbm",'
  323. echo 'uses much less disk space, and is program-compatible (although'
  324. echo 'it is *not* file-compatible, so anything else using the database'
  325. echo '[notably NNTP, if applicable] has to be relinked with it).  Dbz'
  326. echo 'is usually preferable to dbm, barring major backward-compatibility'
  327. tmp=`yesno 'problems.  Do you want to use our "dbz" library' $has`
  328. case "$tmp" in
  329. yes)    dbzlib=dbz
  330.     dbmopt=
  331.     storeval=yes
  332.     ;;
  333. no)    echo 'Presumably you want to use the dbm library or some local'
  334.     echo 'equivalent, then.  What is the compile option, or filename,'
  335.     dbmopt=`ask 'needed to get it' ${dbmopt--ldbm}`
  336.     newfake="$newfake dbz.o"    # make dbm look like dbz
  337.     dbzlib=
  338.     has=`notinlist "$fake" dbmclose.o`
  339.     tmp=`yesno 'Does your dbm/dbz have a dbmclose() function' $has`
  340.     case "$tmp" in
  341.     no)    newfake="$newfake dbmclose.o"    ;;
  342.     esac
  343.     echo 'Does the store() function in your dbm/dbz return a'
  344.     storeval=`yesno 'value (some old dbms did not)' ${storeval-yes}`
  345.     case "$storeval" in
  346.     no)    echo 'You will need to modify libfake/dbz.c/dbzstore() not'
  347.         echo 'to return the nonexistent value of store().'
  348.         ;;
  349.     esac
  350.     ;;
  351. esac
  352.  
  353. fake="$newfake"
  354.  
  355. echo
  356. echo 'Many systems, notably older ones, have implementations of the Standard'
  357. echo 'I/O library ("stdio") in which fgets, fputs, fread, and fwrite are'
  358. echo 'quite slow.  We supply versions of these functions which are faster'
  359. echo 'than those in any stdio we know; they are compatible with most old'
  360. echo 'AT&T-derived stdios.  (They tend not to work on modern System V,'
  361. echo 'but the modern System V stdio is respectably fast.)  They can be a'
  362. echo 'major performance win for C News.  There is a fairly thorough'
  363. echo 'compatibility check run after the library is built; as far as we'
  364. echo 'know, if the test works, the functions do (even on SunOS 4.0).'
  365. faststdio=`yesno 'Do you want to use our fast stdio library' ${faststdio-yes}`
  366. case "$faststdio" in
  367. yes)    echo 'Beware that the compatibility check will work best if'
  368.     echo 'the output of doit.bin is NOT redirected into a file'
  369.     echo 'or a pipe.'
  370.     ;;
  371. esac
  372.  
  373. has=`notinlist "$fake" strchr.o`
  374. case "$has" in
  375. yes)    echo
  376.     echo 'The strchr() function is usually slower than in-line C code'
  377.     echo 'when small strings are involved, unless your compiler is very'
  378.     echo 'clever and can generate in-line code for strchr().  Is your'
  379.     faststrchr=`yesno 'compiler that good (okay to guess)' ${faststrchr-no}`
  380.     ;;
  381. esac
  382.  
  383. echo
  384. echo 'Modern Unixes can generally use the setuid() system call to set the'
  385. echo 'real and effective user ids to the current effective user id.  In'
  386. echo 'old Unixes, only "root" can change the real user id.  This causes'
  387. echo 'various problems for C News.  C News provides a small program named'
  388. echo '"setnewsids" to run setuserid-root; all it does is change user and'
  389. echo 'group ids and then execute C News "relaynews".  It is needed only on'
  390. echo 'uncooperative systems.  Relaynews invokes it automatically if needed'
  391. echo '(and it then invokes relaynews in return).  Can this system do'
  392. sete=`yesno 'setuid(geteuid()) to change the real uid/gid' ${sete-yes}`
  393.  
  394. echo
  395. echo 'Some systems have header files that others lack, and C News'
  396. echo 'is prepared to fake missing ones.'
  397. newfakehdrs=
  398. for h in $mightfakehdrs
  399. do
  400.     has=`notinlist "$fakehdrs" ../include/$h`
  401.     tmp=`yesno "Does your system have an ANSI-C-conforming <$h>" $has`
  402.     case "$tmp" in
  403.     no)    newfakehdrs="$newfakehdrs ../include/$h"    ;;
  404.     esac
  405. done
  406. has=`notinlist "$fakehdrs" ../include/sys/timeb.h`
  407. tmp=`yesno 'Does your system have <sys/timeb.h>' $has`
  408. case "$tmp" in
  409. no)    newfakehdrs="$newfakehdrs ../include/sys/timeb.h"    ;;
  410. esac
  411. fakehdrs="$newfakehdrs"
  412.  
  413. echo
  414. echo 'Very old Unix systems needed the order of object modules in a library'
  415. echo 'chosen very carefully.  V7 introduced "ranlib" which removes the need'
  416. echo 'for this.  Recent System Vs have had the same facility built into "ar"'
  417. echo '(look for the "symdef" feature in the "ar" manual page) so "ranlib"'
  418. ranlib=`yesno 'is not needed.  Does your system use 'ranlib'' ${ranlib-no}`
  419. case "$ranlib" in
  420. no)    symdef=`yesno 'Does your "ar" have a "symdef" feature' ${symdef-yes}`
  421.     case "$symdef" in
  422.     no)    echo 'You have trouble and may need to modify doit.bin before'
  423.         echo 'running it.  It will assume "ranlib" is present.'
  424.         ranlib=yes
  425.         ;;
  426.     esac
  427.     ;;
  428. yes)    symdef=no        ;;
  429. esac
  430.  
  431. echo
  432. echo 'Historically the C compiler is named "cc", but this is not true on'
  433. echo 'some systems, and on others there are several different C compilers.'
  434. cc=`ask 'What is the name of the C compiler to be used' ${cc-cc}`
  435.  
  436. echo
  437. echo 'Historically the only normal compilation option needed for most'
  438. echo 'programs is -O, but again compilers, especially newer ones, differ.'
  439. case "$dbzlib" in
  440. 'dbz')    echo '(NOTE:  many 386 compilers miscompile dbz if -O is used!)' ;;
  441. esac
  442. copts="`ask 'What options should be given to the compiler' \"${copts--O}\"`"
  443.  
  444. echo
  445. echo 'The final linking ("ld") step of compiling might need an option,'
  446. echo 'such as -n or -i, to produce the preferred form of executable file.'
  447. echo 'On most modern systems the default is right.  What options, if any,'
  448. ldopts="`ask 'should be given for linking' \"${ldopts-}\"`"
  449.  
  450. echo
  451. echo 'On unusual systems it may be necessary to link C News programs with'
  452. echo 'libraries other than the usual C library.  These can be specified as'
  453. echo 'either full pathnames or -l... options.  What libraries, in addition'
  454. echo 'to the one(s) picked up automatically by the compiler, should be used'
  455. postlibs="`ask 'when linking C News' \"${postlibs-}\"`"
  456.  
  457. echo
  458. hostname=`yesno 'Does your system have a "hostname" command' ${hostname-yes}`
  459. case "$hostname" in
  460. yes)    uname=no    ;;
  461. no)    uname=`yesno 'Does it have a "uname -n" command' ${uname-yes}`    ;;
  462. esac
  463.  
  464. echo
  465. echo 'C News tries to limit the backlog of news batches spooled up for'
  466. echo 'transmission to a site, to control use of disk space.  To do this,'
  467. echo 'it needs to be able to determine the length of the queue of news'
  468. echo 'batches for a particular site.  This is UUCP-version-dependent.'
  469. echo 'There is a good chance that you will have to customize the "queuelen"'
  470. echo 'program.  C News knows about several versions:'
  471. echo '    hdb    Honey DanBer, aka Basic Networking Utilities'
  472. echo '    sub    old uucp with subdirectories (e.g. /usr/spool/uucp/C.)'
  473. echo '    old    very old uucp, no subdirectories'
  474. echo '    pre    prehistoric uucp, no subdirectories, no -g option on uux'
  475. echo "    null    don't run uucp or don't care about queue lengths"
  476. while true
  477. do
  478.     uucptype=`ask 'Which one is most appropriate' ${uucptype-hdb}`
  479.     case "$uucptype" in
  480.     sub|old)    echo 'Beware -- test "queuelen" to make sure it works.'    ;;
  481.     esac
  482.     case "$uucptype" in
  483.     hdb|sub|old|pre|null)    break    ;;
  484.     esac
  485.     echo 'Sorry, no such choice is available.'
  486. done
  487.  
  488. echo
  489. echo 'C News often wants to ask how much disk space is available.  The'
  490. echo 'format of output from the "df" command unfortunately varies a lot,'
  491. echo 'as does the availability of a system call to get the same information.'
  492. echo 'C News knows about several different versions (the first three are'
  493. echo 'preferred):'
  494. echo '    statfs    system with standard statfs() (SunOS, 4.4BSD, not System V)'
  495. echo '    ustat    system with ustat() (most System Vs)'
  496. echo "    ultrix    DEC Ultrix with DEC's own bizarre statfs()"
  497. echo '    bsd    4.2/4.3BSD'
  498. echo '    sysv    old System Vs'
  499. echo '    xenix    some (all?) Xenixes; some System Vs, e.g. Microport, HP?'
  500. echo '    sgi    Silicon Graphics Iris systems'
  501. echo '    v7    plain old style:  no headers or fluff, just name and number'
  502. echo "    null    don't know or don't care how much space is available"
  503. while true
  504. do
  505.     dftype=`ask 'Which one is most appropriate' ${dftype-bsd}`
  506.     case "$dftype" in
  507.     sysv|xenix)
  508.         echo 'Beware -- test "spacefor" to make sure it works.'
  509.         echo 'System V "df" formats vary widely, indeed wildly.'
  510.         echo '"Consider it standard".  Sure.'
  511.         ;;
  512.     ustat)    echo 'The block size defined in doustat.c (512) may be'
  513.         echo 'too conservative, as many modern System V filesystems'
  514.         echo 'use a 1024-byte block.  There is no way to determine'
  515.         echo 'this automatically and portably.'
  516.         ;;
  517.     esac
  518.     case "$dftype" in
  519.     ustat|statfs|bsd|sysv|sgi|ultrix|xenix|v7|null)    break    ;;
  520.     esac
  521.     echo 'Sorry, no such choice is available.'
  522. done
  523.  
  524. echo
  525. echo 'Some "df" commands, especially on old systems, must be given the'
  526. echo 'name of a device.  Modern ones can be given any directory name and'
  527. echo 'the system handles the details of figuring out what device is meant.'
  528. echo 'A few will take a directory only if it is the "top" of a filesystem.'
  529. dfdirs=`yesno 'Will "df" accept any directory name as an argument' ${dfdirs-yes}`
  530. case "$dfdirs" in
  531. no)    echo 'You are going to have to customize "spacefor" for your system.'
  532.     echo 'It will be generated assuming that directory names do work.'
  533.     ;;
  534. esac
  535.  
  536. echo
  537. archive=`yesno 'Are you planning to use expire to archive news on disk' ${archive-no}`
  538. case "$archive" in
  539. yes)    echo 'You probably want to customize the "archive" entry in'
  540.     echo '"spacefor" so it knows where your archiving is done and how'
  541.     echo 'much space you want free there.'
  542.     ;;
  543. esac
  544.  
  545. echo
  546. spacelow=`yesno 'Are you particularly short of disk space' ${spacelow-no}`
  547. case "$spacelow" in
  548. yes)    echo 'You may want to reconsider whether you really want to get'
  549.     echo 'news, unless you are getting only a very small set of groups.'
  550.     echo 'In any case, you definitely want to inspect "spacefor" and'
  551.     echo 'change some of its thresholds for free space.  BE WARNED'
  552.     echo 'that C News is not built to run on a brim-full file system;'
  553.     echo 'it relies on simple, rough space checks on the assumption that'
  554.     echo 'there is a substantial cushion of free space.'
  555.     ;;
  556. no)    echo 'You may want to inspect "spacefor" to make sure its defaults'
  557.     echo 'for things like desired free space are appropriate for your'
  558.     echo 'system, although the defaults are fairly conservative.'
  559.     ;;
  560. esac
  561.  
  562. echo
  563. echo 'It is very difficult to do anything useful with incoming news when'
  564. echo 'there is no space for it.  Normally, C News simply discards it and'
  565. echo 'mails a trouble report.  On a single-user system, it may be better'
  566. echo 'to just have the news reception stall until more space becomes'
  567. echo 'available.  Warning:  this may stall processing of other incoming'
  568. echo 'traffic, e.g. mail, as well, and the queue of unprocessed traffic'
  569. echo 'may well grow until your disk fills up.  Should news reception'
  570. inputstall=`yesno 'stall if space gets short' ${inputstall-no}`
  571.  
  572. echo
  573. echo 'News processing is much more efficient when done in bulk, so C News'
  574. echo 'normally just saves incoming news and processes it once an hour.'
  575. echo 'If you have ample resources and are wildly impatient to make news'
  576. echo 'available the instant it arrives, that is expensive but possible.'
  577. immediate=`yesno 'Do you want immediate processing' ${immediate-no}`
  578.  
  579. echo
  580. echo 'Are you running C News on a group of machines hooked together with NFS,'
  581. echo 'run essentially as a single system with a single administration,'
  582. nfsgroup=`yesno 'with articles filed on one "server" machine' ${nfsgroup-no}`
  583. case "$nfsgroup" in
  584. yes)    case "$hostname$uname" in
  585.     'nono')    echo 'With a server but no "hostname" command, you will have'
  586.         echo 'problems and will probably have to tinker by hand to'
  587.         echo 'get a fake "hostname" that does the right thing.  The'
  588.         echo 'generated files will assume you have "hostname".'
  589.         hostname=yes
  590.         ;;
  591.     esac
  592.     case "$uname" in
  593.     yes)    tmp="uname -n"    ;;
  594.     no)    tmp="hostname"    ;;
  595.     esac
  596.     server=`ask "What is the \"$tmp\" name of the server" ${server-newsie}`
  597.     ;;
  598. no)    server=newsie        ;;
  599. esac
  600.  
  601. echo
  602. echo 'Several programs need to know an overall name for the system news is'
  603. echo 'being run on, where "system" may include multiple machines if they'
  604. echo 'share a common set of control files and articles; this is used in'
  605. echo 'article headers and related places.  For uucp sites, this usually'
  606. echo 'should be the uucp name.  It is VITAL that you and your neighboring'
  607. echo 'sites agree on this name -- if their news systems know you by a'
  608. echo 'different name, or even a slightly-different variation of the same'
  609. echo 'overall name, there will be trouble.  What is the name of the'
  610. whoami="`ask 'overall system for news purposes' \"${whoami-nowhere}\"`"
  611.  
  612. echo
  613. case "$whoami" in
  614. *.*)    tmp="$whoami"        ;;
  615. *)    tmp="$whoami.uucp"    ;;
  616. esac
  617. echo 'The "From:" lines of news postings, on the other hand, should carry'
  618. echo 'a mailing address, which in particular should be a domain address'
  619. echo 'for sites that have one.  What is the mailing-address name of this'
  620. mailname="`ask 'system, preferably a domain address' \"${mailname-$tmp}\"`"
  621.  
  622. echo
  623. echo 'What is the name of the organization, for insertion into articles'
  624. tmp="${organization-Godcorp}"
  625. organization="`ask 'posted from here' \"${tmp}\"`"
  626.  
  627. echo
  628. echo 'Manual pages are normally stored in a tree structure under /usr/man.'
  629. echo 'Local practices vary a great deal, however, and System V has also'
  630. echo 'introduced some bizarre distortions into this once-simple structure.'
  631. manpages=`ask 'What is the top-level manual-page directory' ${manpages-/usr/man}`
  632.  
  633. echo
  634. chaps='1 5 8'
  635. echo 'C News adds manual pages to chapters 1 (programs), 5 (files), and'
  636. echo '8 (administrative programs).  These chapter numbers have changed'
  637. echo 'in some variants of Unix.  Also, originally pages from chapter 5 (for'
  638. echo "example) were stored in $manpages/man5.  This has also changed in"
  639. manmess=`yesno 'some variants.  Has your system made such changes' ${manmess-no}`
  640. case "$manmess" in
  641. yes)    echo 'You will have to hand-edit the last few lines of doit.bin'
  642.     echo 'to install the manual pages where they belong on your system.'
  643.     ;;
  644. esac
  645.  
  646. echo
  647. echo 'The "rnews" and "cunbatch" commands (which are identical, the latter'
  648. echo 'being purely for backward compatibility with seriously-old systems)'
  649. echo 'have to be installed somewhere where uucp can find them to execute'
  650. echo 'them.  It is not normally necessary for users to be able to run'
  651. echo 'them, so they need not go in the directories searched for normal'
  652. echo 'commands... although uucp often searches only those directories.'
  653. rbin=`ask 'What directory should "rnews" and "cunbatch" go in' ${rbin-/bin}`
  654.  
  655. echo
  656. echo 'Our "postnews", "readnews", and "checknews" are included mostly for'
  657. echo 'completeness.  They are very simple and crude compared to the user'
  658. echo 'interface many users are accustomed to.  As far as we know, B News'
  659. echo '(or other) versions should run fine with C News.  If you are already'
  660. echo 'running such user-interface software, you may not want to change.'
  661. doui=`yesno 'Do you want to install our user-interface programs' ${doui-yes}`
  662. case "$doui" in
  663. yes)    pgmdirs="$pgmdirs rna"    ;;
  664. esac
  665.  
  666. echo
  667. case "$doui" in
  668. no)    tmp='"inews"'    ;;
  669. yes)    tmp='"inews", "postnews", "readnews", and "checknews"'    ;;
  670. esac
  671. echo "The $tmp command(s) should"
  672. echo 'go in one of the directories searched for normal commands, so users'
  673. echo 'can run them without special arrangements.  What directory should'
  674. bin=`ask 'these commands go in' ${bin-/bin}`
  675.  
  676. echo
  677. echo 'For replies to control messages, C News invokes "mail" (typically'
  678. echo '/bin/mail unless you make special arrangements) with either an'
  679. echo 'Internet-style "@" address or a uucp-style "!" address.  Internet'
  680. echo 'style is probably better... if your mailer supports it at all.'
  681. atok=`yesno 'Will "mail" handle "@" addresses' ${atok-no}`
  682.  
  683. case "$doui" in
  684. yes)    echo
  685.     echo 'Postnews can supply a default newsgroup, to aid naive users in'
  686.     echo 'getting this right for simple postings.  What should the default'
  687.     postdefltgroup="`ask 'newsgroup be' \"${postdefltgroup-none}\"`"
  688.  
  689.     echo
  690.     echo 'Postnews can supply a default distribution, to limit news to a'
  691.     echo 'local area unless the user specifically changes it.  This is'
  692.     echo 'probably wise.  What should the default postnews distribution'
  693.     postdefltdist="`ask 'be' \"${postdefltdist-world}\"`"
  694.  
  695.     echo
  696.     echo 'Readnews has a default subscription list, for users who have'
  697.     echo 'not specified what newsgroups they wish to see.  What groups'
  698.     echo 'should be in that list (comma-separated with no spaces, please,'
  699.     defsub="`ask 'as they would be in a .newsrc)' \"${defsub-general}\"`"
  700.  
  701.     echo
  702.     echo 'For administrative use, readnews has one newsgroup that users'
  703.     echo 'must subscribe to, even if they ask not to.  What group should'
  704.     mustsub="`ask 'that be' \"${mustsub-general}\"`"
  705.     ;;
  706. esac
  707.  
  708. echo
  709. echo 'The ihave/sendme protocol, although marginally useful in some cases,'
  710. echo 'is a security hole -- it lets another site ask for any article by'
  711. echo 'Message-ID, and if your Message-IDs are predictable enough (which'
  712. echo "C News's generally are not, mind you), that site can get any article"
  713. echo 'currently on your system.  Do you have any newsgroups containing'
  714. paranoid=`yesno 'confidential or proprietary material' ${paranoid-no}`
  715. case "$paranoid" in
  716. yes)    echo 'You may want to substitute relay/ihave.not.c for relay/ihave.c'
  717.     echo 'before running doit.bin, so that ihave/sendme is disabled'
  718.     echo 'at your site.'
  719.     ;;
  720. esac
  721.  
  722. echo
  723. echo 'building doit.bin...'
  724. >doit.bin
  725. if test ! -w doit.bin
  726. then
  727.     echo 'It appears that I cannot create doit.bin.  Aborting.'
  728.     exit 1
  729. fi
  730. (
  731.     echo '#! /bin/sh'
  732.     echo '# -i suppresses install, -t suppresses stdio test'
  733.     echo '# options are seen in first argument only, i.e. use -ti not -t -i'
  734.     echo "umask $newsumask"
  735.     case "$cc" in
  736.     cc)    ccc="COPTS='$copts'"    ;;
  737.     *)    ccc="CC=$cc COPTS='$copts'"    ;;
  738.     esac
  739.     case "$ldopts" in
  740.     '')                    ;;
  741.     *)    ccc="$ccc LDFLAGS='$ldopts'"    ;;
  742.     esac
  743.     case "$postlibs" in
  744.     '')                    ;;
  745.     *)    ccc="$ccc POST='$postlibs'"    ;;
  746.     esac
  747.     ccc="$ccc DBM=$dbmopt"
  748.     echo "set -x"
  749.     echo ': setting up for substitutions'
  750.     echo "cat >nsubstitutions <<'!'"
  751.     cat <<!
  752. # master substitutions file
  753. #
  754. # where the programs live (see also NEWSCONFIG)
  755. NEWSBIN        $newsbin
  756. # where the control files live
  757. NEWSCTL        $newsctl
  758. # where the articles live
  759. NEWSARTS    $newsarts
  760. # what PATH should be used for finding normal programs
  761. # (things not in NEWSBIN, that is)
  762. NEWSPATH    $newspath
  763. # the umask under which files should be created
  764. NEWSUMASK    $newsumask
  765. # who to send mail to when there is trouble
  766. NEWSMASTER    $newsmaster
  767. # configuration file that lets shell files pick up all of this
  768. NEWSCONFIG    $newsconfig
  769. !
  770.     echo '!'
  771.     echo 'if test -r substitutions && cmp -s nsubstitutions substitutions'
  772.     echo 'then'
  773.     echo '    rm nsubstitutions'
  774.     echo 'else'
  775.     echo '    mv nsubstitutions substitutions'
  776.     echo 'fi'
  777.     echo ': done'
  778.     echo ': building headers'
  779.     echo 'cd ..'
  780.     echo 'if test ! -d include'
  781.     echo 'then'
  782.     echo '    mkdir include include/sys'
  783.     echo 'fi'
  784.     echo 'cd h'
  785.     echo 'rm -f nnewshsed'
  786.     case "$faststrchr" in
  787.     no)    echo 'echo "/FASTSTRCHR.*qqq/s;^;/* ;" >>nnewshsed'    ;;
  788.     esac
  789.     case "$addrsize" in
  790.     big)    echo 'echo "/SMALLMEM.*qqq/s;^;/* ;" >>nnewshsed'    ;;
  791.     esac
  792.     echo 'if test -f newshsed && cmp -s nnewshsed newshsed'
  793.     echo 'then'
  794.     echo '    rm -f nnewshsed'
  795.     echo 'else'
  796.     echo '    mv nnewshsed newshsed'
  797.     echo 'fi'
  798.     echo "make all $ccc || exit 1"
  799.     echo 'cd ../hfake'
  800.      echo "sed -e '/NEEDED =/s~.*~NEEDED = $fakehdrs~' Makefile" '>M.$$'
  801.      echo 'mv -f M.$$ Makefile'
  802.     echo "make all $ccc || exit 1"
  803.     echo ": done"
  804.     echo ": making substitutions..."
  805.     echo "cd ../conf"
  806.     echo "make substs $ccc || exit 1"
  807.     echo ": done"
  808.     echo ': making library...'
  809.     case "$ranlib" in
  810.     yes)    echo "touch ../ranlibed ; sleep 2"    ;;
  811.     esac
  812.     case "$faststdio" in
  813.     yes)    libstdio=libstdio    ;;
  814.     no)    libstdio=        ;;
  815.     esac
  816.     echo "for dir in lib$unixkind lib$addrsize libc libcnews $libstdio $dbzlib"
  817.     echo "do"
  818.     echo "    cd ../\$dir"
  819.     echo "    make u $ccc || exit 1"
  820.     echo "done"
  821.     echo "cd ../libfake"
  822.      echo "sed -e '/NEEDED =/s/.*/NEEDED = $fake/' Makefile" '>M.$$'
  823.      echo 'mv -f M.$$ Makefile'
  824.     echo "make u $ccc || exit 1"
  825.     echo "cd ../conf"
  826.     case "$ranlib" in
  827.     yes)    echo "make ../ranlibed $ccc || exit 1"    ;;
  828.     esac
  829.     echo ': library done'
  830.     case "$faststdio" in
  831.     yes)    echo 'case "$1" in'
  832.         echo '-*t*)    ;;'
  833.         echo '*)    : testing libstdio'
  834.         echo '    cd ../libstdio'
  835.         echo '    : produces some meaningless-looking output on terminal,'
  836.         echo '    : but do not redirect it -- it is important that stdio'
  837.         echo '    : think output is going to a terminal.'
  838.         echo "    make trials $ccc || exit 1"
  839.         echo '    : done'
  840.         echo '    ;;'
  841.         echo 'esac'
  842.         ;;
  843.     esac
  844.     echo ": making spacefor, queuelen, etc...."
  845.     echo 'cd ../conf'
  846.     echo "rm -f spacefor queuelen hostname setnewsids"
  847.     echo "make sf.$dftype $ccc || exit 1"
  848.     echo "cp sf.$dftype spacefor"
  849.     echo "make queuelen.$uucptype $ccc || exit 1"
  850.     echo "cp queuelen.$uucptype queuelen"
  851.     case "$hostname" in
  852.     no)    case "$uname" in
  853.         yes)    echo "echo 'uname -n' >hostname"    ;;
  854.         no)    echo "echo 'echo $whoami' >hostname"    ;;
  855.         esac
  856.     esac
  857.     echo ': done'
  858.     echo ': building programs'
  859.     case "$sete" in
  860.     no)    echo "make setnewsids NEWSUSER=$newsuid NEWSGROUP=$newsgid $ccc || exit 1"
  861.         ;;
  862.     esac
  863.     echo "for dir in $pgmdirs"
  864.     echo "do"
  865.     echo "    cd ../\$dir"
  866.     echo "    make all $ccc || exit 1"
  867.     echo "done"
  868.     echo ": done"
  869.     echo ": building prototype control files"
  870.     echo "cd ../conf"
  871.     echo "rm -f $ctlf"
  872.     echo "cp config.proto config"
  873.     echo "echo '$mailname' >mailname"
  874.     echo "cat <<'!' >organization"
  875.     echo "$organization"
  876.     echo '!'
  877.     case "$nfsgroup" in
  878.     yes)    echo "echo '$server' >server"
  879.     esac
  880.     case "$atok" in
  881.     no)    echo echo "'replies must use paths' >replyusepath"    ;;
  882.     esac
  883.     case "$immediate" in
  884.     yes)    echo echo yes ">rnews.immed"    ;;
  885.     esac
  886.     case "$inputstall" in
  887.     yes)    echo echo yes ">rnews.stall"    ;;
  888.     esac
  889.     case "$doui$postdefltdist" in
  890.     no*)                            ;;
  891.     yesworld)                        ;;
  892.     *)    echo "echo '$postdefltdist' >>postdefltdist"    ;;
  893.     esac
  894.     case "$doui$postdefltgroup" in
  895.     no*)                            ;;
  896.     yesnone)                        ;;
  897.     *)    echo "echo '$postdefltgroup' >>postdefltgroup"    ;;
  898.     esac
  899.     case "$doui" in
  900.     no)                            ;;
  901.     *)    echo "echo 'defsub    $defsub' >readnews.ctl"
  902.         echo "echo 'mustsub    $mustsub' >>readnews.ctl"
  903.         ;;
  904.     esac
  905.     echo "echo '$whoami' >whoami"
  906.     echo "echo 'general 0000000000 0000000001 y' >active"
  907.     echo "echo 'news.announce.newusers 0000000000 0000000001 y' >>active"
  908.     echo "echo 'control 0000000000 0000000001 y' >>active"
  909.     echo "echo 'junk 0000000000 0000000001 y' >>active"
  910.     echo ">errlog"
  911.     echo ">history"
  912.     echo ">history.pag"
  913.     echo ">history.dir"
  914.     echo "echo 'general    general local news' >localgroups"
  915.     echo ">log"
  916.     echo "echo 'all    uunet!%s' >mailpaths"    # crude
  917.     echo "cp sys.proto sys"
  918.     echo "cd ../expire"
  919.     echo "make explists $ccc && cp explist.$archive explist"
  920.     echo "cd ../conf"
  921.     case "$archive" in
  922.     yes)    a='-a /where/ever'    ;;
  923.     no)    a=            ;;
  924.     esac
  925.     echo "cat >cron <<'!'"
  926.     cat <<!
  927. 0,15,30,45 *    1-31 *    0-6    su $newsuid -c '$newsbin/input/newsrun'
  928. 30 8    1-31 *    1-5    su $newsuid -c '$newsbin/input/newsrunning off'
  929. 00 17    1-31 *    1-5    su $newsuid -c '$newsbin/input/newsrunning on'
  930. 40 *    1-31 *    0-6    su $newsuid -c '$newsbin/batch/sendbatches'
  931. 59 0    1-31 *    0-6    su $newsuid -c '$newsbin/expire/doexpire $a'
  932. 10 8    1-31 *    0-6    su $newsuid -c '$newsbin/maint/newsdaily'
  933. 00 5,13,21    1-31 *    0-6    su $newsuid -c '$newsbin/maint/newswatch | mail $newsmaster'
  934. !
  935.     echo "!"
  936.     echo "echo 'su $newsuid -c $newsbin/maint/newsboot' >rc"
  937.     echo ": done"
  938.     echo 'case "$1" in'
  939.     echo '-*i*)    exit 0    ;;'
  940.     echo 'esac'
  941.     echo ': installing programs'
  942.     echo "for dir in $pgmdirs"
  943.     echo "do"
  944.     echo "    cd ../\$dir"
  945.     echo "    make bininstall BIN=$bin RBIN=$rbin $ccc || exit 1"
  946.     echo "done"
  947.     echo ": done"
  948.     echo ': installing manual pages'
  949.     echo 'cd ../man'
  950.     case "$doui" in
  951.     yes)    exclude='!!nothing!!'    ;;
  952.     no)    exclude='^(read|post|check)news\.'    ;;
  953.     esac
  954.     for chap in $chaps
  955.     do
  956.         for f in `ls ../man | egrep -v "$exclude" | egrep "\.$chap\$"`
  957.         do
  958.             echo "cp $f $manpages/man$chap/$f"
  959.         done
  960.     done
  961.     echo ': done'
  962. ) >>doit.bin
  963. echo 'done'
  964.  
  965. echo
  966. echo 'building doit.news...'
  967. >doit.news
  968. if test ! -w doit.news
  969. then
  970.     echo 'It appears that I cannot create doit.news.  Aborting.'
  971.     exit 1
  972. fi
  973. (
  974.     echo '#! /bin/sh'
  975.     echo "umask $newsumask"
  976.     echo 'set -x'
  977.     echo ': installing programs'
  978.     echo "for dir in $pgmdirs"
  979.     echo "do"
  980.     echo "    cd ../\$dir"
  981.     echo "    make newsinstall BIN=$bin RBIN=$rbin $ccc || exit 1"
  982.     echo "done"
  983.     echo ": done"
  984.     echo ": installing control files"
  985.     echo "cd ../conf"
  986.     echo "for f in $ctlf"
  987.     echo "do"
  988.     echo "    if test -r $newsctl/\$f"
  989.     echo "    then"
  990.     echo "        echo \"$newsctl/\$f already exists; left unchanged\""
  991.     echo "    elif test ! -r \$f"
  992.     echo "    then"
  993.     echo "        : \"\$f\" not wanted"
  994.     echo "    else"
  995.     echo "        cp \$f $newsctl/\$f"
  996.     echo "    fi"
  997.     echo "done"
  998.     echo "if test -r $newsconfig"
  999.     echo "then"
  1000.     echo "    cp $newsconfig $newsconfig.old"
  1001.     echo "fi"
  1002.     echo "cp config $newsconfig"
  1003.     echo "chmod +x $newsconfig"
  1004.     echo ": It is virtually certain that some of those control files"
  1005.     echo ": need modifying to suit your system.  In particular, you"
  1006.     echo ": should pick up a current 'active' file from your neighbors."
  1007.     echo ": done"
  1008. ) >>doit.news
  1009. echo 'done'
  1010.  
  1011. echo
  1012. echo 'building again.root...'
  1013. >again.root
  1014. if test ! -w again.root
  1015. then
  1016.     echo 'It appears that I cannot create again.root.  Aborting.'
  1017.     exit 1
  1018. fi
  1019. (
  1020.     echo '#! /bin/sh'
  1021.     echo "umask $newsumask"
  1022.     echo 'set -x'
  1023.     case "$sete" in
  1024.     no)    echo ": installing setnewsids"
  1025.         echo "cp setnewsids $newsctl"
  1026.         echo "$chown root $newsctl/setnewsids"
  1027.         echo "chmod u+s $newsctl/setnewsids"
  1028.         echo ": done"
  1029.         ;;
  1030.     esac
  1031.     echo ": setting uids for setuid programs..."
  1032.     them="$newsbin/input/newsspool $newsbin/relay/relaynews"
  1033.     case "$chboth" in
  1034.     yes)    echo "$chown $newsuid.$newsgid $them"    ;;
  1035.     *)    echo "$chown $newsuid $them"
  1036.         echo "$chgrp $newsgid $them"
  1037.         ;;
  1038.     esac
  1039.     echo "chmod u+s,g+s $them"
  1040.     echo ": done"
  1041. ) >>again.root
  1042. echo 'done'
  1043.  
  1044. echo
  1045. case "$rewrite" in
  1046. no)    ;;
  1047. yes)    echo
  1048.     echo 'saving defaults...'
  1049.     rm -f $memory
  1050.     >$memory
  1051.     warn='# These answers are interdependent; do not edit this file!'
  1052.     if test ! -w $memory
  1053.     then
  1054.         echo 'It appears that I cannot save the defaults.'
  1055.     else
  1056.         (
  1057.             for v in $vars
  1058.             do
  1059.                 echo "$warn"
  1060.                 if test " $v" = " organization"
  1061.                 then
  1062.                     echo "organization=\"$organization\""
  1063.                 else
  1064.                     # even this horror botches metachars in var
  1065.                     eval "echo $v=\\\"\"\$$v\"\\\""
  1066.                 fi
  1067.             done
  1068.         ) >>$memory
  1069.         echo 'done'
  1070.     fi
  1071.     chmod -w $memory
  1072.     ;;
  1073. esac
  1074.  
  1075. echo
  1076. chmod +x doit.root doit.bin doit.news again.root
  1077. echo "You should now run doit.root as root, doit.bin as $binuid, doit.news"
  1078. echo "as $newsuid, and again.root as root, in that order.  (This assumes"
  1079. echo "that the source directories are owned by $binuid.  If you need to do"
  1080. echo "installation work by hand, run 'doit.bin -i' as the owner; this will"
  1081. echo "create the programs but won't install them.)  (It is not necessary"
  1082. echo "to log in as these users; use of 'su' suffices.)  Finally, you will"
  1083. echo "want to add the contents of 'cron', or something similar, to your"
  1084. echo "cron's work-to-be-done file(s), and the contents of 'rc', or something"
  1085. echo "similar, to /etc/rc or whatever your system executes when booting."
  1086. echo
  1087. echo '"make gclean" will clean up everything afterwards.  "make lclean"'
  1088. echo 'does a less drastic cleanup affecting only the library directories.'
  1089. echo '"make spotless" does "make gclean" and also removes the doit files.'
  1090. echo
  1091. echo 'Good luck and happy news reading.'
  1092.